home *** CD-ROM | disk | FTP | other *** search
- {
- From: MAYNARD PHILBROOK
- Subj: Re: bar codes
- ---------------------------------------------------------------------------
- HB> I'm in need of bar code type code. I want to print custom bar codes
- HB> and be able to scan them into an application. I also want to be able
- HB> to do this directly from my application, not via a third party or a tsr
- HB> program.
- }
-
- {$F-,D-,S-,R-,V-,I-}
- { Prints 3 Of 9 Bar Codes other wise known as Code 39 }
- { May only work on EPSON or IBM Dot Matrix Printer !! }
- Uses Printer;
- {$V-}
- Const { Set up Defalt Settings }
- Resolution:Byte = 2; { Vertical Grid Width per Line }
- Hight :Byte = 3; { Number of rows to Print }
- Passes :Byte = 2; { Number for Passing for Darkness }
- Density :Byte = 1; { Printer Graphic Mode L or Z }
- Graphic_Mode:Array[1..2] of String[1] = ('L','Z');
- grid :array[0..43] of string[12] =
- ('110100101011', {1}
- '101100101011', {2}
- '110110010101', {3}
- '101001101011', {4}
- '110100110101', {5}
- '101100110101', {6}
- '101001011011', {7}
- '110100101101', {8}
- '101100101101', {9}
- '101001101101', {0}
- '110101001011', {A}
- '101101001011', {B}
- '110110100101', {C}
- '101011001011', {D}
- '110101100101', {E}
- '101101100101', {F}
- '101010011011', {G}
- '110101001101', {H}
- '101101001101', {I}
- '101011001101', {J}
- '110101010011', {K}
- '101101010011', {L}
- '110110101001', {M}
- '101011010011', {N}
- '110101101001', {O}
- '101101101001', {P}
- '101010110011', {Q}
- '110101011001', {R}
- '101101011001', {S}
- '101011011001', {T}
- '110010101011', {U}
- '100110101011', {V}
- '110011010101', {W}
- '100101101011', {X}
- '110010110101', {Y}
- '100110110101', {Z}
- '100101011011', {-}
- '110010101101', {.}
- '100110101101', { }
- '100101101101', {*}
- '100100100101', {'$'}
- '100100101001', {/}
- '100101001001', {+}
- '101001001001'); {%}
- Function Get_Grid(Yup:Char):String; { Translations Function }
- Var
- PT :Word;
- Begin
- Get_Grid := '';
- Case Yup Of
- '1'..'9':Get_Grid := Grid[ Ord( Yup) -$31];
- '0' :Get_Grid := Grid[9];
- 'A'..'Z':Get_Grid := Grid[10+Ord(Yup)-65];
- '-' :Get_Grid := Grid[36];
- '.' :Get_grid := Grid[37];
- ' ' :Get_Grid := Grid[38];
- '*' :Get_Grid := Grid[39];
- '$' :Get_Grid := Grid[40];
- '/' :Get_Grid := Grid[41];
- '+' :Get_Grid := Grid[42];
- '%' :Get_Grid := Grid[43];
- End;
- End;
- Procedure Send_Char(Yup :Char);
- Var
- Hold :String;
- L, G :Word;
- Out_Bar :Byte;
- Begin
-
- Hold := Get_Grid(Upcase(Yup));
- If Hold <> '' Then
- Begin
- Write(Lst,#27,Graphic_Mode[ Density ]); { Printer in Graph Mode }
- Write(Lst,Char((Resolution * 12)+Resolution),#0); { How many Bytes ?}
- For L := 1 To 12 Do { All 12 Chars }
- Begin
- If Hold[L] ='1' Then Out_bar := 255 Else Out_bar := 0;
- For G := 1 To Resolution Do Write(Lst, Char(Out_Bar));
- End;
- For L := 1 To Resolution Do Write(Lst, #0); { Charactor Separator }
- End;
- End;
-
- Var
- Number_IN :String[15];
- L,LC, DS :Word;
- T :Byte;
- Begin
- Val(ParamStr(1), T, DS ); { Adjust Parameters if Needed }
- If DS = 0 Then Resolution := T; { Width Ratio }
- Val(ParamStr(2), T, DS );
- If DS = 0 Then Hight := T; { Vertical Size of Label }
- Val(ParamStr(3), T, DS );
- If DS = 0 THen Passes := T; { For Darkness adjust }
- Val(ParamStr(4), T, DS );
- If (DS = 0)and( T in [1..2]) Then Density := T; { Printer Mode }
- Repeat
- ReadLn(Number_IN);
- If Number_IN <> '' Then
- Begin
- Write(Lst,#27+'1'); { Set 7/72 Line Spacing }
- For LC := 1 to Hight Do {Hight Loop }
- Begin
- For DS := 1 To Passes Do { Double Strike }
- Begin
- Send_Char('*'); { Must Create a '*' @ start & end }
- For L := 1 To Byte(Number_IN[0]) Do Send_Char(Number_IN [ L ]);
- Send_Char('*');
- Write(Lst,#13);
- End;
- If Lc < Hight Then WriteLn(Lst) else WriteLn(Lst,#27,'2');
- End;
- { Print Number underneath Bars in center or close to it any ways }
- WriteLn(Lst,' ':Resolution,Number_IN:((Byte(Number_IN[0])*(Resolution Div (Byte(Number_In[0])) div 2))));
- End;
- Until Number_In = '';
- End.